Systematic Literature Review: Multiobjective Portfolio

Author

Rodrigo Hermont Ozon

Published

Invalid Date

Code
start_time <- Sys.time()

Systematic Literature Review



Keywords used: "Portfolio Multiobjective" (vice-versa),

An small abstract


Systematic Literature Review Criteria

  • Keywords searched \(\Rightarrow\) "Multiobjective Portfolio", "Portfolio Multiobjective", "Portfolio Selection Multiobjective", "Multi period portfolio multiobjective"

  • Max results searched \(\Rightarrow\) 1000 (to be reduced, obviously)

  • published.print \(\Rightarrow\) >= year 2020

  • is.referenced.by.count \(\Rightarrow\) is.referenced.by.count ordered by most for the minimum

  • score \(\Rightarrow\) In descendant order

R packages

Code
library(dplyr)
library(rcrossref)
library(fpp3)
library(tidyr)
library(purrr)
library(scholar)
library(ggplot2)
library(plotly)
library(tidyverse)

Keyword: “Multiobjective Portfolio”

Code
# Realizar a busca por artigos contendo a palavra-chave "Multiobjective Portfolio"
results <- cr_works(query = "Multiobjective Portfolio", limit = 1000)$data # Max is 1000 searches


cat("Show all features avaiable in selected keywords... \n")
Show all features avaiable in selected keywords... 
Code
# Exibir os resultados da busca
glimpse(results)
Rows: 1,000
Columns: 38
$ created                <chr> "2014-01-13", "2014-09-29", "2021-08-31", "2005…
$ deposited              <chr> "2014-01-27", "2021-12-23", "2021-08-31", "2017…
$ doi                    <chr> "10.12681/eadd/28430", "10.1109/cec.2014.690047…
$ indexed                <chr> "2022-04-01", "2023-01-28", "2022-04-01", "2023…
$ member                 <chr> "4964", "263", "4964", "263", "263", "78", "263…
$ prefix                 <chr> "10.12681", "10.1109", "10.12681", "10.1109", "…
$ publisher              <chr> "National Documentation Centre (EKT)", "IEEE", …
$ score                  <chr> "24.6353", "22.95399", "22.74101", "21.503292",…
$ source                 <chr> "Crossref", "Crossref", "Crossref", "Crossref",…
$ reference.count        <chr> "0", "23", "0", "12", "26", "20", "17", "9", "2…
$ references.count       <chr> "0", "23", "0", "12", "26", "20", "17", "9", "2…
$ is.referenced.by.count <chr> "0", "8", "0", "28", "1", "0", "8", "1", "27", …
$ title                  <chr> "Financial portfolio optimization using multiob…
$ type                   <chr> "dissertation", "proceedings-article", "dissert…
$ url                    <chr> "http://dx.doi.org/10.12681/eadd/28430", "http:…
$ author                 <list> [<tbl_df[1 x 3]>], [<tbl_df[2 x 3]>], [<tbl_df…
$ container.title        <chr> NA, "2014 IEEE Congress on Evolutionary Computa…
$ published.print        <chr> NA, "2014-07", NA, NA, NA, NA, "2007-09", "1989…
$ issued                 <chr> NA, "2014-07", NA, NA, NA, "2022", "2007-09", "…
$ link                   <list> <NULL>, [<tbl_df[1 x 4]>], <NULL>, [<tbl_df[1 …
$ reference              <list> <NULL>, [<tbl_df[23 x 9]>], <NULL>, [<tbl_df[1…
$ abstract               <chr> NA, NA, "<jats:p>Multiobjective optimization (M…
$ issn                   <chr> NA, NA, NA, NA, NA, "1556-5068", NA, NA, NA, NA…
$ subject                <chr> NA, NA, NA, NA, NA, "General Earth and Planetar…
$ language               <chr> NA, NA, NA, NA, NA, "en", NA, NA, NA, NA, NA, N…
$ short.container.title  <chr> NA, NA, NA, NA, NA, "SSRN Journal", NA, NA, NA,…
$ page                   <chr> NA, NA, NA, NA, NA, NA, NA, "1359-1381", NA, NA…
$ license                <list> <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>…
$ alternative.id         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "S0…
$ published.online       <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "20…
$ volume                 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "43…
$ issue                  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ funder                 <list> <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>…
$ update.policy          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ assertion              <list> <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>…
$ archive                <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ isbn                   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ subtitle               <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…

Now showing only selected columns for the table (dataframe) necessary:

Code
results <- results |> 
  mutate(author_expand = map(author, ~as.character(.x))) |> 
  unnest(author_expand) |>
  mutate(author_expand = gsub("c\\(\"|\"\\)", "", author_expand))
         
results <- results |> 
  mutate(link_expand = map(link, ~as.character(.x))) |> 
  unnest(link_expand)
Code
results <- results |> 
  select(
    title,
    author,
    type,
    url,
    container.title,
    short.container.title,
    publisher,
    doi,
    published.print,
    score,
    reference.count,
    is.referenced.by.count,
    link,
    reference,
    abstract,
    issn
) |>
  mutate(
    score = as.numeric(score),
    published.print = coalesce(published.print, "1900-01"), # substitui NAs por "1900-01"
    published.print = yearmonth( published.print )
  ) |>
  filter(
    year(published.print) >= 2020
  ) |> 
  distinct()

Showing the results in a table:

Code
Multiobjective_Portfolio <- results |> 
  arrange( desc(score), desc(is.referenced.by.count) ) |> 
  distinct() |> 
  filter(title != "Front Matter", 
         title != "Cover",
         title != "Books Received")

Multiobjective_Portfolio

Keyword: “Portfolio Selection Multiobjective”

Code
# Realizar a busca por artigos contendo a palavra-chave "Multiobjective Portfolio"
results <- cr_works(query = "Portfolio Selection Multiobjective", limit = 1000)$data # Max is 1000 searches

Now showing only selected columns for the table (dataframe) necessary:

Code
results <- results |> 
  mutate(author_expand = map(author, ~as.character(.x))) |> 
  unnest(author_expand) |>
  mutate(author_expand = gsub("c\\(\"|\"\\)", "", author_expand))
         
results <- results |> 
  mutate(link_expand = map(link, ~as.character(.x))) |> 
  unnest(link_expand)
Code
results <- results |> 
  select(
    title,
    author,
    type,
    url,
    container.title,
    short.container.title,
    publisher,
    doi,
    published.print,
    score,
    reference.count,
    is.referenced.by.count,
    link,
    reference,
    abstract,
    issn
) |>
  mutate(
    score = as.numeric(score),
    published.print = coalesce(published.print, "1900-01"), # substitui NAs por "1900-01"
    published.print = yearmonth( published.print )
  ) |>
  filter(
    year(published.print) >= 2020
  ) |> 
  distinct()

Showing the results in a table:

Code
Portfolio_Selection_Multiobjective <- results |> arrange( desc(score), desc(is.referenced.by.count) ) |> distinct()

Portfolio_Selection_Multiobjective

Keyword: “Multi period portfolio multiobjective”

Code
# Realizar a busca por artigos contendo a palavra-chave "Multiobjective Portfolio"
results <- cr_works(query = "Multi period portfolio multiobjective", limit = 1000)$data # Max is 1000 searches

Now showing only selected columns for the table (dataframe) necessary:

Code
results <- results |> 
  mutate(author_expand = map(author, ~as.character(.x))) |> 
  unnest(author_expand) |>
  mutate(author_expand = gsub("c\\(\"|\"\\)", "", author_expand))
         
results <- results |> 
  mutate(link_expand = map(link, ~as.character(.x))) |> 
  unnest(link_expand)
Code
results <- results |> 
  select(
    title,
    author,
    type,
    url,
    container.title,
    short.container.title,
    publisher,
    doi,
    published.print,
    score,
    reference.count,
    is.referenced.by.count,
    link,
    reference,
    abstract,
    issn
) |>
  mutate(
    score = as.numeric(score),
    published.print = coalesce(published.print, "1900-01"), # substitui NAs por "1900-01"
    published.print = yearmonth( published.print )
  ) |>
  filter(
    year(published.print) >= 2020
  ) |> 
  distinct()

Showing the results in a table:

Code
Multi_period_portfolio_multiobjective <- results |> 
  arrange( desc(score), desc(is.referenced.by.count) ) |> distinct()

Multi_period_portfolio_multiobjective

Final dataframe

Code
Final_df <- bind_rows(
  Multiobjective_Portfolio,
  Portfolio_Selection_Multiobjective,
  Multi_period_portfolio_multiobjective
) |> 
  arrange( desc(title), desc(score) ) |> 
  distinct()


glimpse(Final_df)
Rows: 250
Columns: 16
$ title                  <chr> "Visualising data for portfolio decision-making…
$ author                 <list> [<tbl_df[1 x 5]>], [<tbl_df[1 x 4]>], [<tbl_df…
$ type                   <chr> "book-chapter", "proceedings-article", "journal…
$ url                    <chr> "http://dx.doi.org/10.4324/9780367853129-19", "…
$ container.title        <chr> "Strategic Portfolio Management", "Proceedings …
$ short.container.title  <chr> NA, NA, "Auton Agent Multi-Agent Syst", NA, "Co…
$ publisher              <chr> "Routledge", "International Joint Conferences o…
$ doi                    <chr> "10.4324/9780367853129-19", "10.24963/ijcai.202…
$ published.print        <mth> 2022 dez, 2020 jul, 2022 out, 2022 jan, 2020 ju…
$ score                  <dbl> 18.47202, 16.39417, 14.34200, 14.92646, 14.9536…
$ reference.count        <chr> "0", "0", "61", "28", "32", "0", "0", "0", "0",…
$ is.referenced.by.count <chr> "0", "2", "1", "0", "7", "0", "0", "0", "0", "0…
$ link                   <list> <NULL>, <NULL>, [<tbl_df[3 x 4]>], [<tbl_df[1 …
$ reference              <list> <NULL>, <NULL>, [<tbl_df[61 x 11]>], [<tbl_df[…
$ abstract               <chr> NA, "<jats:p>Aiming to improve the performance …
$ issn                   <chr> NA, NA, "1387-2532,1573-7454", "0302-9743,1611-…
Code
Final_df_unique <- Final_df %>%
  distinct(title, doi, .keep_all = TRUE)

glimpse(Final_df_unique)
Rows: 225
Columns: 16
$ title                  <chr> "Visualising data for portfolio decision-making…
$ author                 <list> [<tbl_df[1 x 5]>], [<tbl_df[1 x 4]>], [<tbl_df…
$ type                   <chr> "book-chapter", "proceedings-article", "journal…
$ url                    <chr> "http://dx.doi.org/10.4324/9780367853129-19", "…
$ container.title        <chr> "Strategic Portfolio Management", "Proceedings …
$ short.container.title  <chr> NA, NA, "Auton Agent Multi-Agent Syst", NA, "Co…
$ publisher              <chr> "Routledge", "International Joint Conferences o…
$ doi                    <chr> "10.4324/9780367853129-19", "10.24963/ijcai.202…
$ published.print        <mth> 2022 dez, 2020 jul, 2022 out, 2022 jan, 2020 ju…
$ score                  <dbl> 18.47202, 16.39417, 14.34200, 14.92646, 14.9536…
$ reference.count        <chr> "0", "0", "61", "28", "32", "0", "0", "0", "0",…
$ is.referenced.by.count <chr> "0", "2", "1", "0", "7", "0", "0", "0", "0", "0…
$ link                   <list> <NULL>, <NULL>, [<tbl_df[3 x 4]>], [<tbl_df[1 …
$ reference              <list> <NULL>, <NULL>, [<tbl_df[61 x 11]>], [<tbl_df[…
$ abstract               <chr> NA, "<jats:p>Aiming to improve the performance …
$ issn                   <chr> NA, NA, "1387-2532,1573-7454", "0302-9743,1611-…
Code
Final_df_unique

By expanding the author names columns:

Code
# Unnest the author column
Final_df_unique_expanded <- Final_df_unique %>%
  unnest(author) %>%
  select(title, given, family)

# Rename the author name columns
Final_df_unique_expanded <- Final_df_unique_expanded %>%
  rename(Author_First_Name = given, Author_Last_Name = family)

# Print the expanded data frame
print(Final_df_unique_expanded)
# A tibble: 514 × 3
   title                                      Author_First_Name Author_Last_Name
   <chr>                                      <chr>             <chr>           
 1 Visualising data for portfolio decision-m… Catherine         Killen          
 2 Vector Autoregressive Weighting Reversion… Xia               Cai             
 3 Towards explainable interactive multiobje… Giovanni          Misitano        
 4 Towards explainable interactive multiobje… Bekir             Afsar           
 5 Towards explainable interactive multiobje… Giomara           Lárraga         
 6 Towards explainable interactive multiobje… Kaisa             Miettinen       
 7 Towards Efficient Multiobjective Hyperpar… Zefeng            Chen            
 8 Towards Efficient Multiobjective Hyperpar… Yuren             Zhou            
 9 Towards Efficient Multiobjective Hyperpar… Zhengxin          Huang           
10 Towards Efficient Multiobjective Hyperpar… Xiaoyun           Xia             
# ℹ 504 more rows

Now inserting the authors name in a new df

Code
authors_df <- Final_df_unique_expanded |>
  group_by(title) %>%
  summarise(Author_Names = paste(Author_First_Name, Author_Last_Name, collapse = "; ")) %>%
  ungroup()

print(authors_df)
# A tibble: 201 × 2
   title                                                            Author_Names
   <chr>                                                            <chr>       
 1 $$l_1$$-Regularization for multi-period portfolio selection      Stefania Co…
 2 2 Energietechnische Portfolio-Analyse                            Eberhard Hi…
 3 A Credibilistic Multiobjective Multiperiod Efficient Portfolio … Arun Kumar;…
 4 A Fast Converging Evolutionary Algorithm for Constrained Multio… Yi Chen; He…
 5 A Markov-switching COGARCH approach to cryptocurrency portfolio… Jules Cleme…
 6 A Multi-period Fuzzy Portfolio Optimization Model with Short Se… Xing-Yu Yan…
 7 A Multi-view Multiobjective Partitioning Technique for Search R… Diksha Bans…
 8 A Multiobjective-Based Group Trading Strategy Portfolio Optimiz… Chun-Hao Ch…
 9 A Multiperiod Multiobjective Portfolio Selection Model With Fuz… Chen Li; Yu…
10 A Nash bargaining solution for a multi period competitive portf… Behnaz Pour…
# ℹ 191 more rows

Author(s)

Code
df_author <- Final_df_unique |>
  select(title,
         author) |>
  unnest(cols = author)

glimpse(df_author)
Rows: 514
Columns: 11
$ title               <chr> "Visualising data for portfolio decision-making", …
$ ORCID               <chr> "http://orcid.org/0000-0002-2370-7856", NA, "http:…
$ authenticated.orcid <lgl> FALSE, NA, FALSE, NA, NA, NA, NA, NA, NA, NA, NA, …
$ given               <chr> "Catherine", "Xia", "Giovanni", "Bekir", "Giomara"…
$ family              <chr> "Killen", "Cai", "Misitano", "Afsar", "Lárraga", "…
$ sequence            <chr> "first", "first", "first", "additional", "addition…
$ affiliation.name    <chr> NA, "Fudan University", NA, NA, NA, NA, NA, NA, NA…
$ suffix              <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ name                <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ affiliation1.name   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ affiliation2.name   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
Code
print(df_author)
# A tibble: 514 × 11
   title ORCID authenticated.orcid given family sequence affiliation.name suffix
   <chr> <chr> <lgl>               <chr> <chr>  <chr>    <chr>            <chr> 
 1 Visu… http… FALSE               Cath… Killen first    <NA>             <NA>  
 2 Vect… <NA>  NA                  Xia   Cai    first    Fudan University <NA>  
 3 Towa… http… FALSE               Giov… Misit… first    <NA>             <NA>  
 4 Towa… <NA>  NA                  Bekir Afsar  additio… <NA>             <NA>  
 5 Towa… <NA>  NA                  Giom… Lárra… additio… <NA>             <NA>  
 6 Towa… <NA>  NA                  Kaisa Miett… additio… <NA>             <NA>  
 7 Towa… <NA>  NA                  Zefe… Chen   first    <NA>             <NA>  
 8 Towa… <NA>  NA                  Yuren Zhou   additio… <NA>             <NA>  
 9 Towa… <NA>  NA                  Zhen… Huang  additio… <NA>             <NA>  
10 Towa… <NA>  NA                  Xiao… Xia    additio… <NA>             <NA>  
# ℹ 504 more rows
# ℹ 3 more variables: name <chr>, affiliation1.name <chr>,
#   affiliation2.name <chr>

Links

Code
df_link <- Final_df |>
  select(
    title,
    link
  ) |>
  unnest(
    cols = link
  )

glimpse(df_link)

References

Code
df_references <- Final_df |>
  select(
    title,
    reference
  ) |>
  unnest(
    cols = reference
  )

glimpse(df_references)

Author´s relevance

Frank Fabozzi

Scholar link https://scholar.google.com/citations?user=tqXS4IMAAAAJ&hl=en

Code
## Define the id for Frank Fabozzi
id <- 'tqXS4IMAAAAJ'

## Get his profile
l <- get_profile(id)

## Print his name and affliation
l$name
[1] "Frank J Fabozzi"
Code
l$affiliation
[1] "EDHEC Business School"
Code
## Print his citation index
l$h_index
[1] 82
Code
l$i10_index
[1] 432

Retrieving publications

Code
## Get his publications (a large data frame)
p <- get_publications(id)
p

Retrieving citation data

Code
## Get his citation history, i.e. citations to his work in a given year
ct <- get_citation_history(id)

## Plot citation trend
ggplotly(
ggplot(ct, aes(year, cites)) + geom_line() + geom_point()
)

Users can retrieve the citation history of a particular publication with get_article_cite_history().

Code
## The following publication will be used to demonstrate article citation history
as.character(p$title[6])
[1] "Robust portfolio optimization and management"
Code
## Get article citation history
ach <- get_article_cite_history(id, p$pubid[6])

## Plot citation trend
plotly::ggplotly(
ggplot(ach, aes(year, cites)) +
    geom_segment(aes(xend = year, yend = 0), size=1, color='darkgrey') +
    geom_point(size=3, color='firebrick')
)

Comparing scholars

You can compare the citation history of scholars by fetching data with compare_scholars.

Code
# Compare Fabozzi and David Ardia
ids <- c('tqXS4IMAAAAJ', 'BPNrOUYAAAAJ')

# Get a data frame comparing the number of citations to their work in
# a given year
cs <- compare_scholars(ids)

## remove some 'bad' records without sufficient information
cs <- subset(cs, !is.na(year) & year > 2000)

plotly::ggplotly(
ggplot(cs, aes(year, cites, group=name, color=name)) + geom_line() + theme(legend.position="bottom")
)
Code
## Compare their career trajectories, based on year of first citation
csc <- compare_scholar_careers(ids)

plotly::ggplotly(
ggplot(csc, aes(career_year, cites, group=name, color=name)) + geom_line() + geom_point() +
    theme(legend.position=c(.2, .8))
)

Visualizing and comparing network of coauthors

Code
coautorias <- 'BPNrOUYAAAAJ&hl'
get_profile(coautorias)$name
[1] "David Ardia"
Code
get_profile('BPNrOUYAAAAJ')$name
[1] "David Ardia"
Code
# Be careful with specifying too many coauthors as the visualization of the
# network can get very messy.
coauthor_network <- get_coauthors('BPNrOUYAAAAJ&hl', n_coauthors = 7)

coauthor_network

And then we have a built-in function to plot this visualization.

Code
plot_coauthors(coauthor_network)

Duan Li

Scholar link https://scholar.google.com/citations?user=e0IkYKcAAAAJ&hl=en

Code
## Define the id for Duan Li
id <- 'e0IkYKcAAAAJ'

## Get his profile
l <- get_profile(id)

## Print his name and affliation
l$name
[1] "Duan Li"
Code
l$affiliation
[1] "City University of Hong Kong + The Chinese University of Hong Kong + University of Virginia"
Code
## Print his citation index
l$h_index
[1] 52
Code
l$i10_index
[1] 180

Retrieving publications

Code
## Get his publications (a large data frame)
p <- get_publications(id)
p

Retrieving citation data

Code
## Get his citation history, i.e. citations to his work in a given year
ct <- get_citation_history(id)

## Plot citation trend
ggplotly(
ggplot(ct, aes(year, cites)) + geom_line() + geom_point()
)

Users can retrieve the citation history of a particular publication with get_article_cite_history().

Code
## The following publication will be used to demonstrate article citation history
as.character(p$title[1])
[1] "Optimal dynamic portfolio selection: Multiperiod mean‐variance formulation"
Code
## Get article citation history
ach <- get_article_cite_history(id, p$pubid[1])

## Plot citation trend
plotly::ggplotly(
ggplot(ach, aes(year, cites)) +
    geom_segment(aes(xend = year, yend = 0), size=1, color='darkgrey') +
    geom_point(size=3, color='firebrick')
)

Comparing scholars

You can compare the citation history of scholars by fetching data with compare_scholars.

Code
# Compare Fabozzi and Duan Li
ids <- c('tqXS4IMAAAAJ', 'e0IkYKcAAAAJ')

# Get a data frame comparing the number of citations to their work in
# a given year
cs <- compare_scholars(ids)

## remove some 'bad' records without sufficient information
cs <- subset(cs, !is.na(year) & year > 2000)

plotly::ggplotly(
ggplot(cs, aes(year, cites, group=name, color=name)) + geom_line() + theme(legend.position="bottom")
)
Code
## Compare their career trajectories, based on year of first citation
csc <- compare_scholar_careers(ids)

plotly::ggplotly(
ggplot(csc, aes(career_year, cites, group=name, color=name)) + geom_line() + geom_point() +
    theme(legend.position=c(.2, .8))
)

Visualizing and comparing network of coauthors

Code
coautorias <- 'e0IkYKcAAAAJ&hl'
get_profile(coautorias)$name
[1] "Duan Li"
Code
get_profile('e0IkYKcAAAAJ')$name
[1] "Duan Li"
Code
# Be careful with specifying too many coauthors as the visualization of the
# network can get very messy.
coauthor_network <- get_coauthors('e0IkYKcAAAAJ&hl', n_coauthors = 7)

coauthor_network

And then we have a built-in function to plot this visualization.

Code
plot_coauthors(coauthor_network)

Woo Chang Kim

Scholar link https://scholar.google.com/citations?user=e0IkYKcAAAAJ&hl=en

Code
## Define the id for Woo Chang Kim
id <- '7NmBs1kAAAAJ'

## Get his profile
l <- get_profile(id)

## Print his name and affliation
l$name
[1] "Woo Chang Kim"
Code
l$affiliation
[1] "Associate Professor, Industrial and Systems Engineering, KAIST"
Code
## Print his citation index
l$h_index
[1] 16
Code
l$i10_index
[1] 21

Retrieving publications

Code
## Get his publications (a large data frame)
p <- get_publications(id)
p

Retrieving citation data

Code
## Get his citation history, i.e. citations to his work in a given year
ct <- get_citation_history(id)

## Plot citation trend
ggplotly(
ggplot(ct, aes(year, cites)) + geom_line() + geom_point()
)

Users can retrieve the citation history of a particular publication with get_article_cite_history().

Code
## The following publication will be used to demonstrate article citation history
as.character(p$title[1])
[1] "Dynamic asset allocation for varied financial markets under regime switching framework"
Code
## Get article citation history
ach <- get_article_cite_history(id, p$pubid[1])

## Plot citation trend
plotly::ggplotly(
ggplot(ach, aes(year, cites)) +
    geom_segment(aes(xend = year, yend = 0), size=1, color='darkgrey') +
    geom_point(size=3, color='firebrick')
)

Comparing scholars

You can compare the citation history of scholars by fetching data with compare_scholars.

Code
# Compare Fabozzi and Woo Chang Kim
ids <- c('tqXS4IMAAAAJ', '7NmBs1kAAAAJ')

# Get a data frame comparing the number of citations to their work in
# a given year
cs <- compare_scholars(ids)

## remove some 'bad' records without sufficient information
cs <- subset(cs, !is.na(year) & year > 2000)

plotly::ggplotly(
ggplot(cs, aes(year, cites, group=name, color=name)) + geom_line() + theme(legend.position="bottom")
)
Code
## Compare their career trajectories, based on year of first citation
csc <- compare_scholar_careers(ids)

plotly::ggplotly(
ggplot(csc, aes(career_year, cites, group=name, color=name)) + geom_line() + geom_point() +
    theme(legend.position=c(.2, .8))
)

Visualizing and comparing network of coauthors

Code
coautorias <- '7NmBs1kAAAAJ&hl'
get_profile(coautorias)$name
[1] "Woo Chang Kim"
Code
get_profile('7NmBs1kAAAAJ')$name
[1] "Woo Chang Kim"
Code
# Be careful with specifying too many coauthors as the visualization of the
# network can get very messy.
coauthor_network <- get_coauthors('7NmBs1kAAAAJ&hl', n_coauthors = 7)

coauthor_network

And then we have a built-in function to plot this visualization.

Code
plot_coauthors(coauthor_network)

David Ardia

Scholar link https://scholar.google.com/citations?hl=en&user=BPNrOUYAAAAJ

Code
## Define the id for David Ardia
id <- 'BPNrOUYAAAAJ'

## Get his profile
l <- get_profile(id)

## Print his name and affliation
l$name
[1] "David Ardia"
Code
l$affiliation
[1] "HEC Montréal & GERAD"
Code
## Print his citation index
l$h_index
[1] 23
Code
l$i10_index
[1] 36

Retrieving publications

Code
## Get his publications (a large data frame)
p <- get_publications(id)
p

Retrieving citation data

Code
## Get his citation history, i.e. citations to his work in a given year
ct <- get_citation_history(id)

## Plot citation trend
ggplotly(
ggplot(ct, aes(year, cites)) + geom_line() + geom_point()
)

Users can retrieve the citation history of a particular publication with get_article_cite_history().

Code
## The following publication will be used to demonstrate article citation history
as.character(p$title[1])
[1] "DEoptim: An R package for global optimization by differential evolution"
Code
## Get article citation history
ach <- get_article_cite_history(id, p$pubid[1])

## Plot citation trend
plotly::ggplotly(
ggplot(ach, aes(year, cites)) +
    geom_segment(aes(xend = year, yend = 0), size=1, color='darkgrey') +
    geom_point(size=3, color='firebrick')
)

Comparing scholars

You can compare the citation history of scholars by fetching data with compare_scholars.

Code
# Compare Fabozzi and David Ardia
ids <- c('tqXS4IMAAAAJ', 'BPNrOUYAAAAJ')

# Get a data frame comparing the number of citations to their work in
# a given year
cs <- compare_scholars(ids)

## remove some 'bad' records without sufficient information
cs <- subset(cs, !is.na(year) & year > 2000)

plotly::ggplotly(
ggplot(cs, aes(year, cites, group=name, color=name)) + geom_line() + theme(legend.position="bottom")
)
Code
## Compare their career trajectories, based on year of first citation
csc <- compare_scholar_careers(ids)

plotly::ggplotly(
ggplot(csc, aes(career_year, cites, group=name, color=name)) + geom_line() + geom_point() +
    theme(legend.position=c(.2, .8))
)

Visualizing and comparing network of coauthors

Code
coautorias <- 'BPNrOUYAAAAJ&hl'
get_profile(coautorias)$name
[1] "David Ardia"
Code
get_profile('BPNrOUYAAAAJ')$name
[1] "David Ardia"
Code
# Be careful with specifying too many coauthors as the visualization of the
# network can get very messy.
coauthor_network <- get_coauthors('BPNrOUYAAAAJ&hl', n_coauthors = 7)

coauthor_network

And then we have a built-in function to plot this visualization.

Code
plot_coauthors(coauthor_network)

Herman Koene Van Dijk

Scholar link https://scholar.google.com/citations?user=8y5_FWQAAAAJ&hl=en

Code
## Define the id for Herman Koene Van Dijk
id <- 'FWQAAAAJ'

## Get his profile
l <- get_profile(id)

## Print his name and affliation
l$name

l$affiliation
Code
## Print his citation index
l$h_index

l$i10_index

Retrieving publications

Code
## Get his publications (a large data frame)
p <- get_publications(id)
p

Retrieving citation data

Code
## Get his citation history, i.e. citations to his work in a given year
ct <- get_citation_history(id)

## Plot citation trend
ggplotly(
ggplot(ct, aes(year, cites)) + geom_line() + geom_point()
)

Users can retrieve the citation history of a particular publication with get_article_cite_history().

Code
## The following publication will be used to demonstrate article citation history
as.character(p$title[1])
Code
## Get article citation history
ach <- get_article_cite_history(id, p$pubid[1])

## Plot citation trend
plotly::ggplotly(
ggplot(ach, aes(year, cites)) +
    geom_segment(aes(xend = year, yend = 0), size=1, color='darkgrey') +
    geom_point(size=3, color='firebrick')
)

Comparing scholars

You can compare the citation history of scholars by fetching data with compare_scholars.

Code
# Compare Fabozzi and Herman Van Dijk
ids <- c('tqXS4IMAAAAJ', 'FWQAAAAJ')

# Get a data frame comparing the number of citations to their work in
# a given year
cs <- compare_scholars(ids)

## remove some 'bad' records without sufficient information
cs <- subset(cs, !is.na(year) & year > 2000)

plotly::ggplotly(
ggplot(cs, aes(year, cites, group=name, color=name)) + geom_line() + theme(legend.position="bottom")
)
Code
## Compare their career trajectories, based on year of first citation
csc <- compare_scholar_careers(ids)

plotly::ggplotly(
ggplot(csc, aes(career_year, cites, group=name, color=name)) + geom_line() + geom_point() +
    theme(legend.position=c(.2, .8))
)

Visualizing and comparing network of coauthors

Code
coautorias <- 'FWQAAAAJ&hl'
get_profile(coautorias)$name

get_profile('FWQAAAAJ')$name


# Be careful with specifying too many coauthors as the visualization of the
# network can get very messy.
coauthor_network <- get_coauthors('FWQAAAAJ&hl', n_coauthors = 7)

coauthor_network

And then we have a built-in function to plot this visualization.

Code
plot_coauthors(coauthor_network)

Bernhard Pfaff

 

 


References


Code
citation(package = "rcrossref")

To cite package 'rcrossref' in publications use:

  Chamberlain S, Zhu H, Jahn N, Boettiger C, Ram K (2022). _rcrossref:
  Client for Various 'CrossRef' 'APIs'_. R package version 1.2.0,
  <https://CRAN.R-project.org/package=rcrossref>.

A BibTeX entry for LaTeX users is

  @Manual{,
    title = {rcrossref: Client for Various 'CrossRef' 'APIs'},
    author = {Scott Chamberlain and Hao Zhu and Najko Jahn and Carl Boettiger and Karthik Ram},
    year = {2022},
    note = {R package version 1.2.0},
    url = {https://CRAN.R-project.org/package=rcrossref},
  }
Code
citation(package = "scholar")

To cite scholar in publications, please use:

  J. Keirstead (2016) scholar: Analyse citation data from Google
  Scholar.  R package version 0.1.5.
  https://github.com/jkeirstead/scholar.

A BibTeX entry for LaTeX users is

  @Manual{,
    author = {James Keirstead},
    title = {scholar: analyse citation data from Google Scholar},
    year = {2016},
    note = {R package version 0.1.5},
    url = {https://github.com/jkeirstead/scholar},
  }